Vagrant+VirtualBoxでMac中にUnityビルド用のMac環境をマルチに作る


概要

Vagrant側で同じMac VMを立ち上げまくっておけば、iOS/Androidとかが同時にビルドできる。


Dockerが流行ってきてる今、Platformから逃げられないの時代遅れだと思いますがまあはい。

Unityを複数立ち上げてるとろくな目に合わないしJenkinsからの制御とかが面倒くさいので、

自動化を容易にするためにやってみる。

MacはもともとMac内VMを2台まで立ち上げられるライセンスなこともあるし、

MacをホストにゲストにMac x 2 を用意して、

同一Unityプロジェクトの複数環境同時ビルドを可能にする。


最終的に、ビルド開始 ~ 完了時までを、Vagrantから起動してるMacインスタンスで行う。

Xcodeの設定とかも一つのMacインスタンスでどうにかできるので、ラク。



VirtualBoxにMacを入れる

以下が参考になる。

[Vagrant & VirtualBox] VirtualBox: guest OS に OS X Mavericks (10.9) をインストールする

http://www.d-wood.com/blog/2014/03/24_5880.html


Mac VMをまず1つだけ作る。この時点で2つ作る必要は無い。boxを作る際の原型にあたる。


このときのVirtualBox名はVM_NAME

内部にインストールするMac OSのユーザー名はVM_INTERNAL_USERNAME とする。


App Store からMavericksをDL

特に何の注意点も無い。


iesdのインストール

gem install iesd


ルートじゃない場合、権限系の調整は必要。


dmgを作る

iesdを使ってMavericksのdmgを作る。特に何の注意点も無い。


dmgをVirtualBoxに食わせる

ここではまった。

メモリを4gbにしたらインストーラ自体が起動しなかった。

デフォルトサイズの2gbで作って後で変更とかかな。


Mac向けの各種設定を行う

いろいろ落としてProvisioningとかCertificateとか。

Xcodeの設定とか、Unityの設定とか。Androidの環境セットとか。

大変面倒くさいが一回で済む。



VirtualBox内のMacにVagrantからの通信を想定して設定を行う

あとでVagrantからsshで入るので、port番号を2222番(vagrantがデフォルトでセットするport forwarding 設定)を作る。

VMマネージャ > 設定 > ポートフォワーディング

スクリーンショット 2014-04-27 1.29.06.png


ホストの2222番ポートをゲストの22番ポートに繋ぐ。

スクリーンショット 2014-04-27 1.28.58.png


最後にsshログインを可能にする。

ホストマシンから、pubキーをゲストに入れて、sshで入れればOK。

ssh VM_INTERNAL_USERNAME@localhost -p 2222


ここまでで、Mac VMの用意は完了。

Vagrantで使用する用の準備に入る。



Vagrantをインストール

http://www.vagrantup.com/downloads.html


以上



VirtualBox上のMacVMをVagrant用にパッケージングする

以下が参考になる

Creating a new Vagrant base box from an existing VM

http://abhishek-tiwari.com/hacking/creating-a-new-vagrant-base-box-from-an-existing-vm


vagrant package --base VM_NAME --output ~/Desktop/Boxies/OUTPUT.box

VagrantからMacインスタンスを起動

起動後、sshでの接続を行うために、Vagrantが繋ぎに行く設定をセットしないといけない。

VagrantFile ファイルを作る

vagrant init ~/Desktop/Boxies/OUTPUT.box



VagrantFile に以下を追加

config.ssh.username = "VM_INTERNAL_USERNAME"

config.ssh.private_key_path = "PATH_OF_SSH_PRIVATE_KEY"



起動

vagrant up


で、無事sshで接続されて完了することを確かめられると思う。



ここまでで、VagrantからMac VMが使えて、sshで接続できる環境は完成。

Unityのビルド、Xcodeでのプロジェクトコンパイル、その後のflightとかを行うのは、VM側になる。

Unityのシングルプロジェクト問題、Xcodeのビルド環境問題、Androidのビルド環境問題を解決できる感じ。




ビルド後のパッケージのアップロードとかは、そのままVM側で行う処理にしちゃった方が良いと思う。




以上。